"""
对ajax的测试，前端数据是从task_list.html中提交过来的
主要用到
1.django的csrf认证（post请求时)
2.数据返回时使用的是json格式
3.数据接收request.POST,或request.GET

重点是返回给前端的数据是json格式
"""

import json

from django import forms
from django.shortcuts import render, HttpResponse, redirect
# 免除crsf认证，如果ajax请求时，不是表单提交所以会很复杂，导入他就行
from django.views.decorators.csrf import csrf_exempt

from app.models import Task
from app.utils.bootstrap import BootstrapModelForm
from app import models
from app.utils.pagination import Pagination

class TaskModelForm(BootstrapModelForm):
    class Meta:
        model = models.Task
        fields = '__all__'  # 所有字段
        # 单独针对详细信息进行控件控制
        widgets = {
            'detail': forms.TextInput,
            # 'detail': forms.Textarea,
        }


""" 任务管理 """


def task_list(request):
    # 猎取全部记录
    queryset = models.Task.objects.all().order_by('-id')

    page_object = Pagination(request, queryset)  # 实例化分页导航条类
    page_queryset = page_object.page_queryset  # 获得分完页的数据结果
    # 生成分页导航条
    page_nav = page_object.html()

    form = TaskModelForm()
    content = {
        'form':form,
        'queryset': page_queryset,  # 分完页的数据结果
        'page_nav': page_nav  # 生成的页码导航条
    }
    return render(request, 'task_list.html', content)


@csrf_exempt
def task_ajax(request):
    # <QueryDict: {'level': ['3'], 'title': ['asdfasdf'], 'detail': ['adfadf'], 'user': ['2']}>
    print(request.GET)
    print(request.POST)  # 接收到的数据

    print(request.POST['n1'])
    # 一般来讲ajax返回的是一个JSON格式的数据
    data_dict = {"status": True, "data": [11, 22, 33]}
    data_json = json.dumps(data_dict)
    return HttpResponse(data_json)


@csrf_exempt
def task_add(request):
    # print(request.POST)
    # 对ajax提交近来的数据进行校验
    form = TaskModelForm(data=request.POST)

    if form.is_valid():
        form.save()  # 向数据表添加数据
        # 将标记传回前端
        data_dict = {"status": True, }
        return HttpResponse(json.dumps(data_dict))
    # 如果有错误
    # 将生成错误以json格式返回给前端
    data_dict = {"status": False, 'error_msg': form.errors}
    return HttpResponse(json.dumps(data_dict, ensure_ascii=False))  # ensure_ascii编码格式


@csrf_exempt
def task_edit(request):
    pass


@csrf_exempt
def task_delete(request, nid):
    """
    删除任务
    """
    Task.objects.filter(id=nid).delete()
    return redirect('/task/list/')
